#include <stack>
#include <nice2d/piece/piecesorter.h>

IMPLEMENT_OBJECT(PieceSorter,Component)

class PieceSorterData
{
public:
    std::stack<std::weak_ptr<Piece>> pieces;
};

PieceSorter::PieceSorter(NodePointer object):
    Component(object),
    data(new PieceSorterData())
{
}

PieceSorter::~PieceSorter()
{
}

void PieceSorter::clear()
{
    std::stack<std::weak_ptr<Piece>> pieces;
    data->pieces.swap(pieces);
}

std::shared_ptr<Piece> PieceSorter::pick() const
{
    if(data->pieces.empty())
        return nullptr;

    auto piece = data->pieces.top();
    data->pieces.pop();
    return piece.lock();
}

void PieceSorter::addPiece(std::weak_ptr<Piece> piece)
{
    data->pieces.push(piece);
}
